// 网络请求工具
import axios from 'axios'

import auth from '@/utils/auth'
import router from '../router'

// 创建一个新的axios实例,进行配置
// 好处:可以搞多个axios实例对接多个服务
// 将来所有的皮脂都在instance进行,使用也是使用这个实例,也是axios
const instance = axios.create({
  baseURL: 'http://geek.itheima.net/',
  timeoute: 5000
})

// 1. 添加请求拦截器
instance.interceptors.request.use(config => {
  // 发送请求前就会执行
  // 对config进行配置
  const token = auth.getToken()
  // 对config进行修改
  if (token) config.headers.Authorization = `Bearer ${token}`
  return config
}, err => {
  // 当前一个函数报错的时候
  // 一定需要返回一个错误的promise对象
  return Promise.reject(err)
})

// 2. 添加响应拦截器
instance.interceptors.response.use(res => { return res }, err => {
  // 当后台报错且状态码为401,代表登陆失效或者未登录
  if (err.response && err.response.status === 401) {
    console.dir(err)
    // 删除无效token
    auth.delToken()
    // 跳转至登录页面
    // 其实router/index.js导出的router实例,挂载到vue上就是$router
    router.push('/login')
  }
  return Promise.reject(err)
})

export default instance
